package com.sky.service;

import com.sky.dto.*;
import com.sky.result.PageResult;
import com.sky.vo.OrderPaymentVO;
import com.sky.vo.OrderStatisticsVO;
import com.sky.vo.OrderSubmitVO;
import com.sky.vo.OrderVO;

/**
 * @author bairimengchang
 * @version 1.0
 * @project sky-take-out
 * @description C端订单业务接口
 * @date 2024/08/26 15:27:18
 */
public interface OrderService {

    /**
     * 用户下单
     * @param ordersSubmitDTO 订单提交传输数据模型
     * @return 用户订单提交返回的数据对象
     */
    OrderSubmitVO submitOrder(OrdersSubmitDTO ordersSubmitDTO);

    /**
     * 订单支付
     * @param ordersPaymentDTO 订单支付传输数据模型
     * @return 订单支付返回的预支付交易单
     */
    OrderPaymentVO orderPayment(OrdersPaymentDTO ordersPaymentDTO);

    /**
     * 订单详情
     * @param id 订单id
     * @return 订单详情视图对象
     */
    OrderVO orderDetail(Long id);

    /**
     * 用户取消订单
     * @param id 订单id
     * @return 取消订单操作是否成功，返回 true 表示成功，false 表示失败
     */
    boolean cancelOrder(Long id);

    /**
     * 历史订单查询
     * @param ordersPageQueryDTO 订单分页查询传输数据模型
     * @return 订单分页查询返回的数据对象
     */
    PageResult getOrdersPage(OrdersPageQueryDTO ordersPageQueryDTO);

    /**
     * 再来一单
     * @param id 订单id
     * @return 再来一单操作是否成功，返回 true 表示成功，false 表示失败
     */
    boolean repetition(Long id);

    /**
     * 用户催单
     * @param id 订单id
     */
    void reminder(Long id);

    /**
     * 各个状态的订单数量统计
     * @return 订单统计数据对象
     */
    OrderStatisticsVO statistics();

    /**
     * 管理员取消订单
     * @param ordersCancelDTO 管理员取消订单传输数据模型
     * @return 取消订单操作是否成功，返回 true 表示成功，false 表示失败
     */
    boolean cancelAdminOrder(OrdersCancelDTO ordersCancelDTO);

    /**
     * 管理员完成订单
     * @param id 订单id
     * @return 完成订单操作是否成功，返回 true 表示成功，false 表示失败
     */
    boolean completeOrder(Long id);

    /**
     * 管理员拒绝订单
     * @param ordersRejectionDTO 管理员拒绝订单传输数据模型
     * @return 拒绝订单操作是否成功，返回 true 表示成功，false 表示失败
     */
    boolean rejectionOrder(OrdersRejectionDTO ordersRejectionDTO);

    /**
     * 管理员接单
     * @param ordersConfirmDTO 管理员接单传输数据模型
     * @return 接单操作是否成功，返回 true 表示成功，false 表示失败
     */
    boolean confirmOrder(OrdersConfirmDTO ordersConfirmDTO);

    /**
     * 管理员派送订单
     * @param id 订单id
     * @return 派送订单操作是否成功，返回 true 表示成功，false 表示失败
     */
    boolean deliveryOrder(Long id);

    /**
     * 管理端分页查询订单信息及详情
     * @param ordersPageQueryDTO 订单分页查询传输数据模型
     * @return 订单分页查询返回的数据对象
     */
    PageResult getAllConditionSearch(OrdersPageQueryDTO ordersPageQueryDTO);
}
